import 'package:dio/dio.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';

class Global {
  static Global _instance = new Global();
  late Dio dio;
  late String token;
  late Map user;



  Global getInstance() {
    // if (_instance == null ) _instance = new Global();
    return Global._instance;
  }
  // https://zxw.td0f7.cn/zxw/doc.html#/home
  Global() {
    dio = new Dio();
    dio.options = BaseOptions(
      baseUrl: "https://zxw.td0f7.cn/",
      // baseUrl: "http://api.td0f7.cn:8083",
      connectTimeout: 5000, // 超时时间
      sendTimeout: 5000, // 发送超时
      receiveTimeout: 5000, // 等待超时
      // 头部
      // headers: {
      //   "token" : "1212"
      // },
      contentType: Headers.formUrlEncodedContentType,
      responseType: ResponseType.json,
    );

    dio.interceptors.add(InterceptorsWrapper(
        onRequest: (options, handler) {
          EasyLoading.show(status: "正在加载...");
          return handler.next(options); //continue
          // 如果你想完成请求并返回一些自定义数据，你可以resolve一个Response对象 `handler.resolve(response)`。
          // 这样请求将会被终止，上层then会被调用，then中返回的数据将是你的自定义response.
          //
          // 如果你想终止请求并触发一个错误,你可以返回一个`DioError`对象,如`handler.reject(error)`，
          // 这样请求将被中止并触发异常，上层catchError会被调用。
        },
        onResponse: (response,handler) {
          EasyLoading.dismiss(); // 取消loading
          return handler.next(response); // continue
          // 如果你想终止请求并触发一个错误,你可以 reject 一个`DioError`对象,如`handler.reject(error)`，
          // 这样请求将被中止并触发异常，上层catchError会被调用。
        },
        onError: (DioError e, handler) {
          String msg = '';
          if(e.type == DioErrorType.connectTimeout) {
          //  连接超时
            msg = "请求连接超时";
          } else {
          //  接口报错
            msg = "请求接口错误";
          }
          EasyLoading.showError(msg);
          // Do something with response error
          // return  handler.next(e);//continue
          // 如果你想完成请求并返回一些自定义数据，可以resolve 一个`Response`,如`handler.resolve(response)`。
          // 这样请求将会被终止，上层then会被调用，then中返回的数据将是你的自定义response.
        }
      )
    );
  }
}